#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pymysql
from config import Config
from models.sleep_monitoring import SleepMonitoringRecord, Room
from models.base import BaseModel

def create_database():
    """创建MySQL数据库"""
    try:
        # 连接到MySQL服务器（不指定数据库）
        connection = pymysql.connect(
            host=Config.DB_HOST,
            port=Config.DB_PORT,
            user=Config.DB_USER,
            password=Config.DB_PASSWORD,
            charset='utf8mb4'
        )
        
        with connection.cursor() as cursor:
            # 创建数据库
            cursor.execute(f"CREATE DATABASE IF NOT EXISTS `{Config.DB_NAME}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
            print(f"✅ 数据库 '{Config.DB_NAME}' 创建成功")
        
        connection.close()
        
    except Exception as e:
        print(f"❌ 创建数据库失败: {e}")
        return False
    
    return True

def create_tables():
    """创建数据表"""
    try:
        from config import get_database
        
        # 连接到新创建的数据库
        db = get_database()
        db.connect()
        
        # 创建所有表
        tables = [Room, SleepMonitoringRecord]
        
        for table in tables:
            if not table.table_exists():
                table.create_table()
                print(f"✅ 表 '{table._meta.table_name}' 创建成功")
            else:
                print(f"ℹ️  表 '{table._meta.table_name}' 已存在")
        
        db.close()
        print("✅ 所有表创建完成")
        
    except Exception as e:
        print(f"❌ 创建表失败: {e}")
        return False
    
    return True

def main():
    """主函数"""
    print("🚀 开始创建MySQL数据库和表...")
    print(f"📊 数据库配置:")
    print(f"   主机: {Config.DB_HOST}:{Config.DB_PORT}")
    print(f"   数据库: {Config.DB_NAME}")
    print(f"   用户: {Config.DB_USER}")
    print()
    
    # 创建数据库
    if create_database():
        # 创建表
        if create_tables():
            print("\n🎉 MySQL数据库设置完成！")
            print("现在可以运行应用程序了。")
        else:
            print("\n❌ 表创建失败")
    else:
        print("\n❌ 数据库创建失败")

if __name__ == '__main__':
    main()